package cool.webstudy.admin.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import cool.webstudy.admin.model.dto.team.user.CreateTeamUserDTO;
import cool.webstudy.admin.model.dto.team.user.PaginationQueryTeamUserInfoListDTO;
import cool.webstudy.admin.model.dto.team.user.TeamUserDetailInfoDTO;
import cool.webstudy.admin.model.dto.team.user.UpdateTeamUserDTO;
import cool.webstudy.admin.model.po.team.user.TeamUserPO;
import cool.webstudy.admin.model.vo.team.QueryOwnTeamDetailInfoVO;
import cool.webstudy.admin.model.vo.team.user.PaginationQueryTeamUserInfoListVO;
import cool.webstudy.admin.model.vo.team.user.QueryTeamUserDetailInfoVO;

import java.util.List;

/**
 * @description: 队伍与用户关系管理接口定义类
 */

public interface TeamUserService {
    /**
     * @param unCode 队伍业务主键
     * @return UserPO 队伍信息实体
     * @description: 判断队伍与用户关系否存在，如果存在，则返回队伍与用户关系的信息实体
     */

    TeamUserPO isExist(String unCode);

    /**
     * @param unCode 业务主键
     * @return QueryTeamDetailInfoVO 查询队伍与用户关系详细信息接口响应参数模型
     * @description: 查询队伍与用户关系详细信息
     */
    QueryTeamUserDetailInfoVO queryTeamUserDetailInfo(String unCode);
    /**
     * @param userUnCode 用户业务主键
     * @return QueryTeamDetailInfoVO 查询队伍与用户关系详细信息接口响应参数模型
     * @description: 根据用户业务主键查询队伍与用户关系详细信息
     */
    QueryTeamUserDetailInfoVO queryTeamUserDetailInfoByUserUnCode(String userUnCode);
    /**
     * @param dto 创建队伍与用户关系请求参数模型
     * @return Boolean 是否成功标识
     * @description: 创建队伍与用户关系
     */
    Boolean createTeamUser(CreateTeamUserDTO dto);
    /**
     * @param dto 更新队伍与用户关系接口请求参数模型
     * @return Boolean 是否成功标识
     * @description: 更新队伍与用户关系
     */
    Boolean updateTeamUser(UpdateTeamUserDTO dto);


    /**
     * @param unCodeList 业务主键列表
     * @return Boolean 是否成功标识
     * @description: 批量删除队伍与用户关系
     */
    Boolean batchDeleteTeamUser(List<String> unCodeList);

    /**
     * @param dto 分页获取信息列表接口请求参数基础模型
     * @return Page<PaginationQueryUserInfoListVO> 分页获取队伍信息列表接口响应模型
     * @description: 分页获取队伍与用户关系信息列表
     */
    Page<PaginationQueryTeamUserInfoListVO> paginationQueryTeamUserInfoList(PaginationQueryTeamUserInfoListDTO dto);
    /**
     * @return QueryOwnTeamDetailInfoVO 查询所属队伍详细信息接口响应参数模型
     * @description: 查询所属队伍详细信息
     */
    QueryOwnTeamDetailInfoVO queryOwnTeamDetailInfoVO();
    /**
     * @param teamUnCode 队伍业务主键
     * @return List<TeamUserDetailInfoDTO> 队伍与用户关系详细信息列表
     * @description: 根据队伍业务主键查询队伍与用户关系详细信息列表
     */
    List<TeamUserDetailInfoDTO> queryTeamUserDetailInfoDTOList(String teamUnCode);
    /**
     * @param userUnCode 用户业务主键
     * @return TeamUserDetailInfoDTO 队伍与用户关系详细信息
     * @description: 根据用户业务主键查询队伍与用户关系详细信息
     */
    TeamUserDetailInfoDTO queryTeamUserDetailInfoDTOByUserUnCode(String userUnCode);
}
